"""
解题思路

括号匹配题目是最常见的基于栈求解的题目。

要了解为什么可以这么做，首先我们需要知道括号是如何匹配的：
括号的匹配就是当输入一个后括号的时候，向前匹配最近的未被匹配的前括号，如果可以顺利匹配则成功，反之则失败。
故，在这到题目中，当我们遇到前括号的时候，我们可以压栈；当我们遇到后括号的时候便可以和栈顶的元素做比较，
如果这是栈内有元素，且相匹配，则将栈顶弹出，匹配成功；如果不匹配则代表有问题，括号序列存在问题。

"""


class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i in ['(', '[', '{']:
                stack.append(i)
            elif i == ')' and len(stack) > 0 and stack[-1] == '(':
                stack.pop()
            elif i == ']' and len(stack) > 0 and stack[-1] == '[':
                stack.pop()
            elif i == '}' and len(stack) > 0 and stack[-1] == '{':
                stack.pop()
            else:
                return False
        return len(stack) == 0